package com.stars.home;


import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.stars.home.activity.CustomErrorActivity;
import com.stars.home.config.Config;
import com.stars.home.jupsh.componnent.JpushUtils;
import com.stars.home.service.MsgService;
import com.stars.home.update.util.FileDownLoadUtils;
import com.stars.home.utils.WeChatUtil;
import com.tencent.mmkv.MMKV;
import com.trailer.base.base.BApp;
import com.trailer.base.config.IConfig;
import com.zhangke.websocket.WebSocketHandler;
import com.zhangke.websocket.WebSocketManager;
import com.zhangke.websocket.WebSocketSetting;

import cat.ereza.customactivityoncrash.config.CaocConfig;

public class App extends BApp {

    private static App app = null;

    private IConfig config;


    @Override
    protected void init() {
        app = this;


        Boolean isEnable= MMKV.defaultMMKV().getBoolean("Enable", false);

        if(isEnable) {
//            UpdateUtils.INSTANCE.init(this);
            JpushUtils.INSTANCE.initPush(this);

        }

        //注册微信
        WeChatUtil.Companion.regToWx(app);
        // 在使用 SDK 各组间之前初始化 context 信息，传入 ApplicationContext
        // 默认本地个性化地图初始化方法
        SDKInitializer.initialize(this);
        // 自4.3.0起，百度地图SDK所有接口均支持百度坐标和国测局坐标，用此方法设置您使用的坐标类型.
        // 包括BD09LL和GCJ02两种坐标，默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);

        //下载监听
        FileDownLoadUtils.INSTANCE.setup(this);

        //整个配置属性，可以设置一个或多个，也可以一个都不设置
        CaocConfig.Builder.create()
                .showErrorDetails(true)
                .errorActivity(CustomErrorActivity.class)
                // .eventListener(new CustomEventListener())
                .apply();


        initWebSocket();





    }

    public void initWebSocket() {

        WebSocketSetting setting = new WebSocketSetting();
        //连接地址，必填，例如 wss://echo.websocket.org   ws://192.168.50.27:5001
        setting.setConnectUrl(config().BBDCUrl());//必填

        //设置连接超时时间
        setting.setConnectTimeout(15 * 1000);

        //设置心跳间隔时间
        setting.setConnectionLostTimeout(2000);

        //设置断开后的重连次数，可以设置的很大，不会有什么性能上的影响
        setting.setReconnectFrequency(60000);

        //网络状态发生变化后是否重连，
        //需要调用 WebSocketHandler.registerNetworkChangedReceiver(context) 方法注册网络监听广播
        setting.setReconnectWithNetworkChanged(true);

        //通过 init 方法初始化默认的 WebSocketManager 对象
        WebSocketManager manager = WebSocketHandler.init(setting);
        //启动连接
        manager.start();

        //注意，需要在 AndroidManifest 中配置网络状态获取权限
        //注册网路连接状态变化广播
        WebSocketHandler.registerNetworkChangedReceiver(this);

        MsgService.getInstance().connect();


    }




    public static App getApp() {
        return app;
    }


    @Override
    public IConfig config() {
        if (config == null) {
            config = new Config();
        }
        return config;
    }
}
